package userclient

import (
	"fmt"
	"log"
	"os"

	"github.com/spf13/viper"
)

type Config struct {
	// ServerTcpEndpoint 是连接服务器tcp的地址
	ServerTcpEndpoint string `mapstructure:"serverTcpEndpoint"`

	// ServerUdpEndpoint  是连接服务器udp的地址
	ServerUdpEndpoint string `mapstructure:"serverUdpEndpoint"`

	// ListenPort 是本地监听的端口
	ListenPort int `mapstructure:"listenPort"`
}

// config 是全局配置信息
var config Config

// LoadFromPath 是在 path 路径中读取配置文件
func LoadFromPath(path string) {
	viper.SetConfigFile(path)
	err := viper.ReadInConfig()
	if err != nil {
		panic(err)
	}

	err = viper.Unmarshal(&config)
	if err != nil {
		panic(fmt.Errorf("注入配置信息失败:%w", err))
	}
}

// exampleConf 是示例配置信息
const exampleConf = `
serverTcpEndpoint: 127.0.0.1:1500
serverUdpEndpoint: 127.0.0.1:1501
listenPort: 8080
`

// SaveExampleConf 是在 path 路径下保存示例配置文件
func SaveExampleConf(path string) {
	file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0775)
	if err != nil {
		log.Printf("[Error] 打开文件失败")
	}
	defer file.Close()

	file.Write([]byte(exampleConf))
}
